Within a networked architecture it is known that individual computers can communicate with one another using distinct network protocols such as TCP/IP. Using these protocols it is possible for a person running a software application on a first computer to utilise data that is stored on another computer such as a file server or the like.
It is also known in the art to provide software applications that enable a remote user to effectively take control of another computer so as to run computer applications that reside on the remote computer from their own local computer. Such applications include that provided by Microsoft™ under their Remote Desktop brand and an open source software application called VNC (Virtual Network Computing). These applications make it possible to view and fully-interact with one computer from any other computer or mobile device anywhere on the Internet. VNC software is a cross-platform application which is advantageous in that it allows remote control between different types of computer, but has the restriction that only that the end user can only control one remote machine at a time; for each end user it is a 1-1 arrangement.
AnyplaceControl™ is a product that allows the user to connect to multiple machines simultaneously. However, although the user can connect to the multiple machines, he is restricted in that he can control one machine at a time, but cannot control multiple machines by passing the same action to many machines simultaneously. Therefore, although it is different to VNC in that it enables a 1-many connection, it does not allow 1-many control.
Uses of these remote desktop software applications include system administration, IT support and helpdesk applications where the technical support provider can log into the computer that is causing the difficulty and interrogate it without having to be physically present at the computer. These systems allow several connections to the same desktop thereby enabling collaborative or shared working, but with only one computer acting as the controller at a time. The remote desktop application can also be used for training purposes, whereby the instructor can view a single pupil's machine or several pupils' machines, however heretofore simultaneous control of multiple machines by the teacher is not possible.
Such control of a remote computer by a local computer can be used in the realm of software testing. Software testing involves the operation of a system or application under controlled conditions and an evaluation of the results. The controlled conditions should include both normal and abnormal conditions. Testing should intentionally attempt to make things go wrong to determine if things happen when they should happen and more importantly if things happen when they should not happen. The requirements for good software testing are reasonably well defined to ensure that it is a process of quality control using group of well defined methods and evaluation criteria, together with guidelines for their use, to ensure that the software products or modules are of sufficiently high quality. The testing that is required for good software testing has to be rigorous and as such it will be apparent that it adds to the cost of development. It can be applied to all or some of the following activities:                Robustness, Reliability, and Security Testing        Ensuring that the software provides fault-free service under specific hardware and software environments.        Logo Compliance and Certification Testing        Ensuring the application under test meets standards to compliant with a standard such as Sun “JavaVerified” or Microsoft “Designed for Windows”.        Compatibility Testing        Application and hardware compatibility testing for new versions of platform and system software.        Interoperability/Integration Testing        Ensuring that various components of the system work well together in selected scenarios.        Globalisation/Localisation        Testing to ensure that a product meets well defined globalisation standards.        
As the application of software testing is pervasive within a computer software architecture, it would therefore be advantageous if certain portions of the test strategy could be automated. Despite the benefits in cost and time, automated testing to date has not been perfect. Some examples have been deployed in what is called user interface automated testing where one or more of the following actions are used:                Capturing controls,        Manipulating controls,        Acquiring data from controls.        
In capturing controls it is necessary to know what you are looking for. For example in an Windows™ environment there are three types of controls:                1. Standard Windows™ controls—buttons, text boxes, custom controls,        2. Custom owner drawn controls are controls that have the functionality of standard controls but also have custom functionality added by the developer. Windows provides support for “owner drawn” controls and menus by allowing the developer to override methods in the base classes of menus or dialogs and implement new appearance and behaviour of the control or menu.        3. Painted controls—controls that have the functionality of standard controls, but also have functionality added by the developer. In addition to the “Custom owner draw controls”, the painted controls take responsibility for processing windows messages, such as WM_PAINT, themselves.        
Current automated testing tools come in three general categories, each with different operating modes, namely:                Simple capture-record and playback,        Object orientated automation,        Image-based component discovery.        
It will be appreciated that each of these techniques has different architecture and different characteristics. The Simple Capture Record/Playback has the advantage of being simple, while it suffers the disadvantages of being sensitive to graphical user interface changes, sensitive to application position on the screen and having playback synchronisation issues. The programmatic approach can adjust to changes in the application user interface more easily than the former approach and can handle playback synchronisation issues better. However, there is a skills issue where the tester has also to be a developer. The issue of test case script development brings with it version control and change management, much like a software development process. The third approach utilises images that are generated and utilised during the running of the program being tested. Images are taken of regions around the mouse at the time of some mouse interaction. This image is then stored. At a later time the stored image is used to identify where the mouse action should be taken either during playback of a test script or where the action should be taken on some other system.
An example of an available product that utilises image based component discovery in an automated testing context is a product provided by Redstone™ under their Eggplant™ brand. Eggplant™ is a software testing tool that utilises VNC (discussed above) which is specifically directed towards testing what a human will experience when using a software application. The Eggplant™ software operates by separating the issues of finding a region of interest and finding the area where the user input is to be applied.
Furthermore, Eggplant does not recognise objects in the sense described for Object Oriented automated testing. The Eggplant “objects” are screenshots of identifying features, they are not objects in the sense of widgets, with defined data and behaviour. The Eggplant “objects” are defined by the user, using the movable and resizable window that defines the region of interest.
There is therefore a need to provide a system and methodology that enables a control of a plurality of computing devices through the desktop of a first computing device, with desktops of the controlled devices being displayed on a display associated with the first device. There is a further need for an image based discovery testing application that can be easily rolled out over multiple computers and provides a robust and secure testing architecture.